package com.unpor.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class AppUtil {

    public static Boolean checkAPP(String reqKey,String reqDate){
        final String appId ="A6059782765088";
        final String appkey="9628812C-1392-B17E-27CF-D3755C5D4E36";
        String str = appId +"XW"+ appkey +"XW"+ reqDate;
        String md5 = new MD5Util().MD5(str);
        if (reqKey.equals(md5)){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 时间格式化 data 转 String
     * @param date 时间
     * @param type 状态
     * @return
     */
    public static String dataToString(Date date,int type){
        SimpleDateFormat simpleFormat = null;
        simpleFormat = getSimpleDateFormat(type);
        return simpleFormat.format(date);
    }

    /**
     * 时间格式化 String 转 data
     * @param string
     * @param type
     */
    public static Date stringToData(String string,int type){
        SimpleDateFormat simpleFormat = null;
        simpleFormat = getSimpleDateFormat(type);
        Date date = null;
        try {
            date = simpleFormat.parse(string);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 生成随机数
     * @param type 你要几位的验证码 默认可以使用 2-8 位的验证码，type 非法，直接返回6位
     */
    public static int randomNumber(int type){
        if(type==8){return (int)((Math.random()*9+1)*10000000);}
        if(type==7){return (int)((Math.random()*9+1)*1000000);}
        if(type==6){return (int)((Math.random()*9+1)*100000);}
        if(type==5){return (int)((Math.random()*9+1)*10000);}
        if(type==4){return (int)((Math.random()*9+1)*1000);}
        if(type==3){return (int)((Math.random()*9+1)*100);}
        if(type==2){return (int)((Math.random()*9+1)*10);}
        return (int)((Math.random()*9+1)*100000);
    }

    /**
     * 计算两个时间之间的时间
     * @param start   开始时间
     * @param end  结束时间
     * @param type 计算 1：分钟  2：小时  3：天
     * @return
     */
    public static int timeDifference(Date start, Date end, int type){
        int figure=0;
        // 时间改成String
        long from1 = start.getTime();
        long to1 = end.getTime();
//        秒
        if(type==1){
            figure = (int) ((to1 - from1)/(1000));
        }
//        分钟
        if(type==2){
            figure = (int) ((to1 - from1)/(1000 * 60));
        }
//        小时
        if(type==3){
            figure = (int) ((to1 - from1)/(1000 * 60 * 60));
        }
//        天
        if(type==4){
            figure = (int) ((to1 - from1)/(1000 * 60 * 60 * 24));
        }
        return figure;
    }
    /**
     * 返回Map集合
     */
    public static Map<String, Object> returnMap(String msg, String desc){
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("msg",msg);
        map.put("desc",desc);
        return map;
    }
    /**
     * UUID
     */
    public static String uuid(){
        String uuid = UUID.randomUUID().toString();
        return uuid.replaceAll("-","");
    }

    /**
     * 保存图片
     */
    @Autowired
    private static ServletContext servletContext;

    public static String saveFile(MultipartFile file) {
        if (!file.isEmpty()) {
            try {
                // getRealPath() 取得 WEB-INF 所在文件夹路径
                // 如果参数是 "/temp", 当 temp 存在时返回 temp 的本地路径, 不存在时返回 null/temp (无效路径)
                String name= UUID.randomUUID()+file.getOriginalFilename();
                String path = servletContext.getRealPath("") + "/uplodefiles/"+  name;
                FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(path));
                String imgurl = "http://jsp.xw025.com"+"/uplodefiles/"+  name;
                return imgurl;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "1";
    }
    /**
     * 订单编号
     */
    public static String getOrderCode() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        int a = (int)(Math.random()*(9999-1000+1))+1000;
        System.out.println(a);
        Date date = new Date();
        String str = sdf.format(date);
        String[] split = str.split("-");
        String s = split[0] + split[1] + split[2];
        String[] split1 = s.split(" ");
        String s1 = split1[0] + split1[1];
        String[] split2 = s1.split(":");
        String s2 = split2[0] + split2[1] + split2[2]+a;
        System.out.println(s2);
        return s2;
    }


    /**
     * 时间调用
     * @param type
     * @return
     */
    private static SimpleDateFormat getSimpleDateFormat(int type) {
        SimpleDateFormat simpleFormat;
        if(type==1){
            simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");//如2016-08-10 20:40
        } else if(type==2){
            simpleFormat = new SimpleDateFormat("yyyy-MM-dd");//如2016-08-10
        } else if(type==3){
            simpleFormat = new SimpleDateFormat("yyyy/MM");//如2016-08-10
        } else if(type==4){
            simpleFormat = new SimpleDateFormat("yyyyMMdd");//如2016-08-10
        } else if(type==5){
            simpleFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//如2016-08-10
        } else if(type==6){
            simpleFormat = new SimpleDateFormat("yyyyMMddHHmmss");//如2016-08-10
        } else if(type==7){
            simpleFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");//如2016-08-10
        } else if(type==8){
            simpleFormat = new SimpleDateFormat("HH:mm:ss");//如2016-08-10
        } else if(type==9){
            simpleFormat = new SimpleDateFormat("HH:mm");//如2016-08-10
        } else if(type==10){
            simpleFormat = new SimpleDateFormat("HHmm");//如2016-08-10
        } else {
            simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//如2016-08-10
        }

        return simpleFormat;
    }


    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(uuid());
    }
}
